 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.losalpes.client;

import com.losalpes.persistence.entity.Cliente;
import com.losalpes.persistence.entity.CriterioBusqueda;
import com.losalpes.persistence.entity.TipoBusqueda;
import com.losalpes.persistence.entity.TipoDocumento;
import com.losalpes.persistence.entity.TipoUsuario;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.model.SelectItem;

/**
 *
 * @author Luis Fernando Martinez Moreno
 */

public class ClientBean {

    @EJB
    private IClientService clientService;
    private Cliente cliente = new Cliente();
    private String identificacionCliente = "";
    private List<Cliente> listaClientes ;
    private CriterioBusqueda criterioBusqueda = new CriterioBusqueda();

    public CriterioBusqueda getCriterioBusqueda() {
        return criterioBusqueda;
    }

    public void setCriterioBusqueda(CriterioBusqueda criterioBusqueda) {
        this.criterioBusqueda = criterioBusqueda;
    }

    /**
     * obtiene la identificación del cliente
     * @return id del cliente
     */
    public String getIdentificacionCliente() {
        return identificacionCliente;
     }

    /**
     * modifica la identificación del cliente
     * @param identificacionCliente id del cliente
     */
    public void setIdentificacionCliente(String identificacionCliente) {
        this.identificacionCliente = identificacionCliente;
    }

    /**
     * Creates a new instance of ClientBean
     */
    public ClientBean() {
    }

    /**
     * Retorna la instancia del cliente.
     * @return Cliente
     */
    public Cliente getCliente() {
        return cliente;
    }

    /**
     * Modifica la instancia del cliente
     * @param cliente cliente a asignar
     */
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    /**
     * Hace la acción para crear  actualizar un cliente
     * @return "actualizarcliente"
     */
    public String create(){
        cliente.getUsuario().setTipoUsuario(TipoUsuario.CLIENTE);
        clientService.create(cliente);        
        return "login";
    }

    /**
     * Hace la acción para crear  actualizar un cliente
     * @return "actualizarcliente"
     */
    public String update(){
        clientService.update(cliente);
        cliente = new Cliente();
        return "busquedacliente";
    }

    /**
     * obtiene la lista de todos los clientes
     * @return lista con todos los clientes del sistema
     */
    public List<Cliente> getTodosLosClientes(){
        return clientService.findAll();
    }

    /**
     * obtiene la lista de tipos de documento
     * @return lista de tipos de documentos
     */
    public SelectItem[] getTiposDocumentos() {
        TipoDocumento[] tipos=  TipoDocumento.values();
        SelectItem[] sitems = new SelectItem[tipos.length];
        for (int i = 0; i < sitems.length; i++) {
             sitems[i] = new SelectItem(tipos[i]);
        }
        return sitems;
    }

    /**
     * obtiene un arreglo de criterios de búsqueda.
     * @return arreglos de criterios de búsqueda.
     */
    public SelectItem[] getCriteriosBusqueda(){
        TipoBusqueda[] tiposBusqueda = TipoBusqueda.values();
        SelectItem[] sitems = new SelectItem[tiposBusqueda.length];
        for (int i = 0; i < sitems.length; i++) {
             sitems[i] = new SelectItem(tiposBusqueda[i]);
        }
        return sitems;
    }

    /**
     * carga la lista de clientes
     */
    public void buscarClientes(){
        listaClientes = clientService.findClientePorCriterio(criterioBusqueda);
    }


    /**
     * obtiene la lista de clientes encontados segpun el criterio
     * @return lista de clientes
     */
    public List<Cliente> getClientesEncontrados(){
        return listaClientes;
    }

    /**
     * ejecuta la acción de eliminar un cliente.
     * @return ""
     */
    public String deleteClient(){

        clientService.eliminarCliente(cliente);
        cliente = new Cliente();
        listaClientes = clientService.findAll();
        return "";
    }

    /**
     * Hace la búsqueda del cliente por id y envía a la página de actualización
     * @return "actualizarcliente"
     */
    public String buscarClientePorId(){
        cliente = clientService.findClienteByIdentificacion(identificacionCliente);
        return "actualizarcliente";
    }
}